package com.hyt.it.ogt.ykcj.mapper.exam;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hyt.it.ogt.ykcj.common.core.domain.entity.SysDictData;
import com.hyt.it.ogt.ykcj.domain.exam.ExamInfo;
import com.hyt.it.ogt.ykcj.domain.vo.ExamInfoExternalVo;
import com.hyt.it.ogt.ykcj.domain.vo.ExamInfoVo;
import com.hyt.it.ogt.ykcj.domain.vo.HistoryScoreLineVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 考试信息Mapper接口
 *
 * @author admin
 * @date 2021-06-18
 */
public interface ExamInfoMapper extends BaseMapper<ExamInfo> {
    /**
     * 查询考试信息
     *
     * @param id 考试信息ID
     * @return 考试信息
     */
    ExamInfo selectExamInfoById(String id);


    /**
     * 批量查询考试信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    List<ExamInfo> selectExamInfoByIds(String[] ids);

    /**
     * 查询考试信息列表
     *
     * @param examInfo 考试信息
     * @return 考试信息集合
     */
    List<ExamInfo> selectExamInfoList(ExamInfo examInfo);

    /**
     * 新增考试信息
     *
     * @param examInfo 考试信息
     * @return 结果
     */
    int insertExamInfo(ExamInfo examInfo);

    /**
     * 修改考试信息
     *
     * @param examInfo 考试信息
     * @return 结果
     */
    int updateExamInfo(ExamInfo examInfo);

    /**
     * 批量删除考试信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteExamInfoByIds(String[] ids);

    /**
     * 检查关联的考试数量
     *
     * @param @param  parms
     * @param @return
     */
    int checkExamInfoByConfigId(Map<String, Object> parms);

    /**
     * 条件查询，年份、创建时间倒序
     *
     * @param @param  parms
     * @param @return
     * @author qisw
     * @date 2021年6月23日 下午3:26:54
     */
    List<ExamInfoVo> selectExamInfoByParms(Map<String, Object> parms);

    List<ExamInfo> selectChangedExamInfoList();

    List<ExamInfo> selectChangedServantExamInfoList();

    /**
     * 根据考试名称ID查询考试类型
     *
     * @param examNameConfigId 考试名称ID
     * @return
     */
    List<SysDictData> getExamType(@Param("examNameConfigId") String examNameConfigId);

    List<HistoryScoreLineVo> queryHistoryServantExam(@Param("examYear") String examYear, @Param("examType") String examType);

    /**
     * 查询最近一场考试
     *
     * @param examType 考试信息ID
     * @return 考试信息
     */
    ExamInfo selectExamInfoByExamType(@Param("examType") String examType);

    /**
     * 查询最近一场考试组
     *
     * @param examType 考试信息ID
     * @return 考试信息
     */
    ExamInfo selectExamGroupInfoByExamType(@Param("examType") String examType, @Param("examForm") Integer examForm);

    /**
     * 条件查询，年份、创建时间倒序
     *
     * @param @param  parms
     * @param @return
     * @author qisw
     * @date 2021年6月23日 下午3:26:54
     */
    List<ExamInfoVo> selectEnterpriseExamInfoByParms(Map<String, Object> parms);

    /**
     * 合并考试备选
     *
     * @param @param  parms
     * @param @return
     * @author qisw
     * @date 2021年6月23日 下午3:26:54
     */
    List<ExamInfoVo> examInfoSelectList(Map<String, Object> parms);

    /**
     * 根据考试code查询考试信息
     *
     * @param examCode
     * @return
     */
    ExamInfo selectExamInfoByCode(String examCode);

    /**
     * 根据考试id获取考试信息
     *
     * @param examId
     * @return
     */
    ExamInfoVo selectExamInfoByExamId(String examId);

    /**
     * 获取考试类型列表
     *
     * @param officeId 机构id
     * @return
     */
    List<ExamInfoVo> getClassficationId(String officeId);


    /**
     * 查询成绩信息
     *
     * @param officeId
     * @return
     */
    List<ExamInfoExternalVo> getExamInfoExternalVosByOfficeId(@Param("officeId") String officeId, @Param("bindingStatus") Integer bindingStatus, @Param("examName") String examName);

    /**
     * 查询成绩信息
     *
     * @param examIds
     * @return
     */
    List<ExamInfoExternalVo> getExamInfoExternalVosByExamIds(@Param("examIds") String[] examIds);

    /**
     * 根据考试类型查询考试名称
     *
     * @param examTypes （0:专业资格考试 1:公务员考试）
     * @param deptIds
     * @return
     */
    List<Map<String, String>> getEnterpriseExamNameList(@Param("examForm") String examForm, @Param("examTypes") String[] examTypes, @Param("type") String type, @Param("officeId") String officeId, @Param("deptIds") Set<String> deptIds);

    /**
     * 解除关联关系
     *
     * @param list
     * @return
     */
    int emptyBatchExamInfoRel(List<ExamInfoVo> list);

    /**
     * 删除考试信息数据
     *
     * @param examInfoId
     */
    void deleteCandidateConfig(String examInfoId);
    void deleteCandidateInfo(String examInfoId);
    void deleteChangedExamInfo(String examInfoId);
    void deleteEnterpriseExamScoreLineSetting(String examInfoId);
    void deleteEnterpriseExamScoreLineSettingSub(String examInfoId);
    void deleteEnterpriseExamineeAnalysisData(String examInfoId);
    void deleteEnterpriseExamineeCertificateRelation(String examInfoId);
    void deleteEnterpriseExamineeInfo(String examInfoId);
    void deleteEnterpriseExamineeSubjectGrade(String examInfoId);
    void deleteExamNameConfig(String examInfoId);
    void deleteExamPostInfo(String examInfoId);
    void deleteExamPostScoreLineSetting(String examInfoId);
    void deleteExamPublishCertificateInfo(String examInfoId);
    void deleteExamPublishSubjectInfo(String examInfoId);
    void deleteExamPublishInfo(String examInfoId);
    void deleteExamResultDatadlRecord(String examInfoId);
    void deleteExamReviewInfo(String examInfoId);
    void deleteExamScoreAnalysisLine(String examInfoId);
    void deleteExamStemInfo(String examInfoId);
    void deleteExamSubjectNameConfig(String examInfoId);
    void deleteExamSubjectInfo(String examInfoId);
    void deleteExamineeExamInfo(String examInfoId);
    void deleteExamineeExamPaperInfo(String examInfoId);
    void deleteExamineeGradeInfo(String examInfoId);
    void deleteExamineeSubjectGradeInfo(String examInfoId);
    void deleteExamInfo(String examInfoId);

    List<ExamInfo> listByTaskId(String timeId);
}
